home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 376-400 / disk_386 / xlispstat / src1.lzh / Headers / xldmem.h < prev    next >
C/C++ Source or Header  |  1990-10-03  |  7KB  |  233 lines

  1. #ifndef XLDMEM_H
  2. #define XLDMEM_H
  3.  
  4. /* xldmem.h - dynamic memory definitions */
  5. /* Copyright (c) 1989, by David Michael Betz.                            */
  6. /* You may give out copies of this software; for conditions see the file */
  7. /* COPYING included with this distribution.                              */
  8.  
  9. /* small fixnum range */
  10. #define SFIXMIN        (-128)
  11. #define SFIXMAX        255
  12. #define SFIXSIZE    384
  13.  
  14. /* character range */
  15. #define CHARMIN        0
  16. #define CHARMAX        255
  17. #define CHARSIZE    256
  18.  
  19. /* new node access macros */
  20. #define ntype(x)    ((x)->n_type)
  21.  
  22. /* cons access macros */
  23. #define car(x)        ((x)->n_car)
  24. #define cdr(x)        ((x)->n_cdr)
  25. #define rplaca(x,y)    ((x)->n_car = (y))
  26. #define rplacd(x,y)    ((x)->n_cdr = (y))
  27.  
  28. /* symbol access macros */
  29. #define getvalue(x)     ((x)->n_vdata[0])
  30. #define setvalue(x,v)     ((x)->n_vdata[0] = (v))
  31. #define getfunction(x)     ((x)->n_vdata[1])
  32. #define setfunction(x,v) ((x)->n_vdata[1] = (v))
  33. #define getplist(x)     ((x)->n_vdata[2])
  34. #define setplist(x,v)     ((x)->n_vdata[2] = (v))
  35. #define getpname(x)     ((x)->n_vdata[3])
  36. #define setpname(x,v)     ((x)->n_vdata[3] = (v))
  37. #define SYMSIZE        4
  38.  
  39. /* closure access macros */
  40. #define getname(x)         ((x)->n_vdata[0])
  41. #define setname(x,v)       ((x)->n_vdata[0] = (v))
  42. #define gettype(x)        ((x)->n_vdata[1])
  43. #define settype(x,v)      ((x)->n_vdata[1] = (v))
  44. #define getargs(x)         ((x)->n_vdata[2])
  45. #define setargs(x,v)       ((x)->n_vdata[2] = (v))
  46. #define getoargs(x)        ((x)->n_vdata[3])
  47. #define setoargs(x,v)      ((x)->n_vdata[3] = (v))
  48. #define getrest(x)         ((x)->n_vdata[4])
  49. #define setrest(x,v)       ((x)->n_vdata[4] = (v))
  50. #define getkargs(x)        ((x)->n_vdata[5])
  51. #define setkargs(x,v)      ((x)->n_vdata[5] = (v))
  52. #define getaargs(x)        ((x)->n_vdata[6])
  53. #define setaargs(x,v)      ((x)->n_vdata[6] = (v))
  54. #define getbody(x)         ((x)->n_vdata[7])
  55. #define setbody(x,v)       ((x)->n_vdata[7] = (v))
  56. #define getenv(x)    ((x)->n_vdata[8])
  57. #define setenv(x,v)    ((x)->n_vdata[8] = (v))
  58. #define getfenv(x)    ((x)->n_vdata[9])
  59. #define setfenv(x,v)    ((x)->n_vdata[9] = (v))
  60. #define getlambda(x)    ((x)->n_vdata[10])
  61. #define setlambda(x,v)    ((x)->n_vdata[10] = (v))
  62. #define CLOSIZE        11
  63.  
  64. /* vector access macros */
  65. #define getsize(x)    ((x)->n_vsize)
  66. #define getelement(x,i)    ((x)->n_vdata[i])
  67. #define setelement(x,i,v) ((x)->n_vdata[i] = (v))
  68. #define setconstant(x, c) ((x)->n_vconst = (c))  /* L. Tierney */
  69. #define isconstant(x) ((x)->n_vconst)            /* L. Tierney */
  70.  
  71. /* object access macros */
  72. #define getclass(x)    ((x)->n_vdata[0])
  73. #define getivar(x,i)    ((x)->n_vdata[i+1])
  74. #define setivar(x,i,v)    ((x)->n_vdata[i+1] = (v))
  75.  
  76. /* subr/fsubr access macros */
  77. #define getsubr(x)    ((x)->n_subr)
  78. #define getoffset(x)    ((x)->n_offset)
  79.  
  80. /* fixnum/flonum/char access macros */
  81. #define getfixnum(x)    ((x)->n_fixnum)
  82. #define getflonum(x)    ((x)->n_flonum)
  83. #define getchcode(x)    ((x)->n_chcode)
  84.  
  85. /* string access macros */
  86. #define getstring(x)    ((x)->n_string)
  87. #define getslength(x)    ((x)->n_strlen)
  88.  
  89. /* file stream access macros */
  90. #define getfile(x)    ((x)->n_fp)
  91. #define setfile(x,v)    ((x)->n_fp = (v))
  92. #define getsavech(x)    ((x)->n_savech)
  93. #define setsavech(x,v)    ((x)->n_savech = (v))
  94.  
  95. /* unnamed stream access macros */
  96. #define gethead(x)    ((x)->n_car)
  97. #define sethead(x,v)    ((x)->n_car = (v))
  98. #define gettail(x)    ((x)->n_cdr)
  99. #define settail(x,v)    ((x)->n_cdr = (v))
  100.  
  101. /* allocated data access macros *//* L. Tierney */
  102. #define getadaddr(x)    ((x)->n_adaddr)
  103. #define getadreloc(x)    ((int)((x)->n_adreloc))
  104. #define getadsize(x)    (((x)->n_adsize))
  105.  
  106. /* node types */
  107. #define FREE    0
  108. #define SUBR    1
  109. #define FSUBR    2
  110. #define CONS    3
  111. #define SYMBOL    4
  112. #define FIXNUM    5
  113. #define FLONUM    6
  114. #define STRING    7
  115. #define OBJECT    8
  116. #define STREAM    9
  117. #define VECTOR    10
  118. #define CLOSURE    11
  119. #define CHAR    12
  120. #define USTREAM    13
  121. #define COMPLEX 14            /* L. Tierney */
  122. #define DISPLACED_ARRAY 15    /* L. Tierney */
  123. #define ALLOCATED_DATA 16     /* L. Tierney */
  124. #define STRUCT    17
  125.  
  126. /* subr/fsubr node */
  127. #define n_subr        n_info.n_xsubr.xs_subr
  128. #define n_offset    n_info.n_xsubr.xs_offset
  129.  
  130. /* cons node */
  131. #define n_car        n_info.n_xcons.xc_car
  132. #define n_cdr        n_info.n_xcons.xc_cdr
  133.  
  134. /* fixnum node */
  135. #define n_fixnum    n_info.n_xfixnum.xf_fixnum
  136.  
  137. /* flonum node */
  138. #define n_flonum    n_info.n_xflonum.xf_flonum
  139. /* character node */
  140. #define n_chcode    n_info.n_xchar.xc_chcode
  141.  
  142. /* string node */
  143. #define n_string    n_info.n_xstring.xs_string
  144. #define n_strlen    n_info.n_xstring.xs_length
  145.  
  146. /* stream node */
  147. #define n_fp        n_info.n_xstream.xs_fp
  148. #define n_savech    n_info.n_xstream.xs_savech
  149.  
  150. /* vector/object node */
  151. #define n_vsize        n_info.n_xvector.xv_size
  152. #define n_vdata        n_info.n_xvector.xv_data
  153. #define n_vconst    n_info.n_xvector.xv_const  /* L. Tierney */
  154.  
  155. /* allocated data node *//* L. Tierney */
  156. #define n_adaddr    n_info.n_xadata.xa_addr
  157. #define n_adreloc    n_info.n_xadata.xa_reloc
  158. #define n_adsize    n_info.n_xadata.xa_size
  159.  
  160. /* node structure */
  161. typedef struct node {
  162.     char n_type;        /* type of node */
  163.     char n_flags;        /* flag bits */
  164.     union ninfo {         /* value */
  165.     struct xsubr {        /* subr/fsubr node */
  166. #ifdef ANSI
  167.         struct node *(*xs_subr)(void);    /* function pointer */
  168. #else
  169.         struct node *(*xs_subr)();    /* function pointer */
  170. #endif
  171.         int xs_offset;        /* offset into funtab */
  172.     } n_xsubr;
  173.     struct xcons {        /* cons node */
  174.         struct node *xc_car;    /* the car pointer */
  175.         struct node *xc_cdr;    /* the cdr pointer */
  176.     } n_xcons;
  177.     struct xfixnum {    /* fixnum node */
  178.         FIXTYPE xf_fixnum;        /* fixnum value */
  179.     } n_xfixnum;
  180.     struct xflonum {    /* flonum node */
  181.         FLOTYPE xf_flonum;        /* flonum value */
  182.     } n_xflonum;
  183.     struct xchar {        /* character node */
  184.         int xc_chcode;        /* character code */
  185.     } n_xchar;
  186.     struct xstring {    /* string node */
  187.         int xs_length;        /* string length */
  188.         unsigned char *xs_string;    /* string pointer */
  189.     } n_xstring;
  190.     struct xstream {     /* stream node */
  191.         FILE *xs_fp;        /* the file pointer */
  192.         int xs_savech;        /* lookahead character */
  193.     } n_xstream;
  194.     struct xvector {    /* vector/object/symbol/structure node */
  195.         int xv_size;        /* vector size */
  196.         struct node **xv_data;    /* vector data */
  197.         char xv_const;              /* constant flag for symbols - L. Tierney */
  198.     } n_xvector;
  199.     struct xadata {
  200.         char xa_reloc;
  201.         char *xa_addr;
  202.         long xa_size;
  203.     } n_xadata;
  204.     } n_info;
  205. } *LVAL;
  206.  
  207. /* memory segment structure definition */
  208. typedef struct segment {
  209.     int sg_size;
  210.     struct segment *sg_next;
  211.     struct node sg_nodes[1];
  212. } SEGMENT;
  213.  
  214. /* memory allocation functions */
  215. extern LVAL cons();        /* (cons x y) */
  216. extern LVAL cvsymbol();           /* convert a string to a symbol */
  217. extern LVAL cvstring();           /* convert a string */
  218. extern LVAL cvfile();        /* convert a FILE * to a file */
  219. extern LVAL cvsubr();        /* convert a function to a subr/fsubr */
  220. extern LVAL cvfixnum();           /* convert a fixnum */
  221. extern LVAL cvflonum();           /* convert a flonum */
  222. extern LVAL cvchar();        /* convert a character */
  223.  
  224. extern LVAL newstring();    /* create a new string */
  225. extern LVAL newvector();    /* create a new vector */
  226. extern LVAL newobject();    /* create a new object */
  227. extern LVAL newclosure();    /* create a new closure */
  228. extern LVAL newustream();    /* create a new unnamed stream */
  229. extern LVAL newcomplex();       /* L. Tierney */
  230. extern LVAL newadata();        /* convert an internal data pointer - L. Tirney*/
  231. extern LVAL newstruct();    /* create a new structure */
  232.  
  233. #endif XLDMEM_H